package controlmercancias.remoto;

import java.io.IOException;
import java.net.Socket;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import controlmercancias.util.SocketManager;

/**
 *
 * @author Hasier
 */
public class ServidorActualizaciones implements Runnable {

    private SocketManager sm;

    public ServidorActualizaciones(Socket s) throws IOException {
        sm = new SocketManager(s);
    }

    @Override
    public void run() {
        try {
            String linea, comando, usuario = "", clave = "";
            for (int estado = 0; estado < 3;) {
                linea = sm.read();
                if (linea == null) {
                    return;
                }
                StringTokenizer sTok = new StringTokenizer(linea, " ");
                comando = sTok.nextToken().toUpperCase();

                switch (estado) {
                    case 0:
                        if (comando.equals("USER")) {
                            try {
                                usuario = sTok.nextToken();
                                if ("".equals(usuario.trim())) {
                                    throw new NoSuchElementException();
                                }
                                //TODO Comprobar usuario
                                usuario = usuario.trim();
                                sm.write("210 OK Bienvenido " + usuario);
                                estado = 1;
                            } catch (NoSuchElementException ex) {
                                sm.write("411 ERR Falta el nombre de usuario");
                            }
                        } else if (comando.equals("SALIR")) {
                            estado = 3;
                        } else {
                            sm.write("500 ERR Comando incorrecto");
                        }
                        break;

                    case 1:
                        if (comando.equals("PASS")) {
                            try {
                                clave = sTok.nextToken();
                                if ("".equals(clave.trim())) {
                                    throw new NoSuchElementException();
                                }
                                //TODO Comprobar contraseña
                                if (usuario.equals("Mikel") && clave.equals("94475")) {
                                    sm.write("211 OK Bienvenido al sistema");
                                    estado = 2;
                                } else {
                                    sm.write("412 ERR La clave es incorrecta");
                                }
                            } catch (NoSuchElementException ex) {
                                sm.write("413 ERR Falta la clave");
                            }
                        } else if (comando.equals("SALIR")) {
                            estado = 3;
                        } else {
                            sm.write("500 ERR Comando incorrecto");
                        }
                        break;

                    case 2:
                        if(comando.equals("GET_FICHERO")) {
                            sm.write("OK 30564 bytes transmitiendo");
                            //TODO Transmitir fichero
                        } else if (comando.equals("SALIR")) {
                            estado = 3;
                        } else {
                            sm.write("500 ERR Comando incorrecto");
                        }
                        break;
                }
            }
            sm.write("218 OK Adios");
            sm.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } catch (NoSuchElementException nsee) {
            nsee.printStackTrace();
        }
    }
}
